import quicksort.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;

import org.omg.CORBA.*;

/** rekursives Sortieren mit Quicksort
* CORBA-Version
*/
public class QuickSortImpl extends _QuicksImplBase {
	private String name;
    
  public QuickSortImpl(String s)  {
    super();
    name =s;
  }
  
  public  int[] sort (int[] a) {
		qsort ( a,  0,  a.length-1 );	
		return (a);
	}

  void  qsort (int[] a, int unten, int oben) {
    int tmp ;
    int i = unten;
    int j = oben;
    int x = a[(unten+oben) / 2];                  // Pivotelement, willkuerlich
    do {
        while (a[i] < x) i++;                     // x fungiert als Bremse
        while (a[j] > x) j--;                     // x fungiert als Bremse
        if ( i<=j )  {
            tmp  = a[i];                          // Hilfsspeicher
            a[i] = a[j];                          // a[i] und
            a[j] = tmp;                           // a[j] werden getauscht
            i++;
            j--;
        }
    } while (i <= j);
                              // alle Elemente der linken Haelfte sind kleiner
                              // als alle Elemente der rechten Haelfte

    if (unten < j)  qsort(a, unten, j);            // sortiere linke Haelfte
    if (i < oben )  qsort(a, i, oben );            // sortiere rechte Haelfte
  }

  public static void main(String args[]) 
   {
   try{
    
      // Create and initialize the ORB
      ORB orb = ORB.init(args, null);
      // Create the servant and register it with the ORB
		  QuickSortImpl quick = new QuickSortImpl("QuickSort");
      orb.connect(quick);
      // Get the root naming context
      org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
      NamingContext ncRef = NamingContextHelper.narrow(objRef);
      // Bind the object reference in naming
      NameComponent nc = new NameComponent("QuickSort", "");
      NameComponent path[] = {nc};
      ncRef.rebind(path, quick);
      System.out.println ("QuickSortImpl im Name Server als QuickSort registriert !");      
      // Wait for invocations from clients
			orb.run();
      }
      catch (Exception re) {
      System.err.println("Exception in QuickSortImpl.main: " + re);
    }
  }
}
